<?php
namespace app\lib;


use think\Validate;
use app\exception\ParamEx;

/** 
* 数据验证层
*/
class MyValid extends Validate {
    
    protected $data; // 参与验证的数据

    public function goCheck($scene = null , $data = []){
        $this->data = empty($data) ? $this->request->param() : $data;
        if ($scene) {
            $this->scene($scene);
        }
        $res = $this->check($this->data);
        if(! $res) {
            // 抛出异常
            throw new ParamEx($this->getError());
        }
        return $this->passData();;
    }
    
    /**
     * 通过验证器的数据
     *
     * @param string $data
     * @return array
     */
    public function passData(): array{
        $resArr = [];
        if (! $this->currentScene) {
            $validFields = array_keys($this->rule);
        }else if (isset($this->scene[$this->currentScene]) ) {
            $validFields = $this->scene[$this->currentScene];
        }else{
            $validFields = $this->only;
        }
        foreach ($validFields as $field) {
            if (strpos($field, '|')) {
                $field = explode('|', $field)[0];
            }
            // 抛弃空数据
            if (array_key_exists($field, $this->data) && ! empty($this->data[$field])) {
                $resArr[$field] = $this->data[$field];
            }
        }
        return $resArr;
    }
    /* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 自定义验证规则 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */

    /**
     * 如果一个字段什么验证都不需要，那就填这个！！！
     *
     * @param mixed $value
     * @return boolean
     */
    protected function isSafe($value){
        // TODO 安全参数校验
        return true;
    }

    public function isNotEmpty($value){
        if(empty(trim($value))) return false;
        else return true;
    }

    /**
     * 验证正整数
     *
     * @param string|int|float $value 待验证的数据
     * @return boolean
     */
    protected function isPosInt($value){
        if (floor($value) == $value && ($value + 0) > 0) {
            return true;
        }else{
            return false;
        }
    }

    /**
     * 验证正整数串（逗号分隔）
     *
     * @param string $value
     * @return boolean
     */
    protected function isCommaStr($value){
        $value_arr = explode(',',$value);
        if(empty($value_arr)) return false;
        return true;
    }


}